class fast_svd_t{
public:
  fast_svd_t(int seed, ostream * os);
  ~fast_svd_t();
  void do_QR(float * A, int rows, int cols, float * Q, float * R);
  void do_QR(gsl_matrix * A, gsl_matrix * Q, gsl_matrix * R);
  void do_randSVD(float * A, int rows, int cols, float * U, float * S, float *V,int k,int p);
  void do_SVD(float * A, int rows, int cols, float * U, float * S, float *V);
  void do_SVD(gsl_matrix * A,gsl_matrix * U, gsl_vector * S, gsl_matrix * V);
  void debug_gsl_mat(const char * title, gsl_matrix * mat);
  void debug_float_mat(const char * title, float * mat,int rows,int cols);
private:
  ostream * os;
  gsl_rng * rng;
};
